package xyz.xmh.pattern.structural.decoratorpattern;

/**
 * @author Administrator
 * 装饰器模式演示类
 * 装饰器模式在不修改一个类添加新的功能
 * 装饰类和被装饰类可以独立发展，不会相互耦合，装饰模式是继承的一个替代模式，装饰模式可以动态扩展一个实现类的功能。
 * （减少继承的耦合）
 */
public class DecoratorPatternDemo {

    public static void main(String[] args) {
        // 圆形对象
        Shape circle = new Circle();

        // 有红色边框的圆形对象
        Shape circleRedBorder = new RedShapeDecorator(new Circle());

        // 有红色边框的长方形
        Shape rectangleBorder = new RedShapeDecorator(new Rectangle());

        // 测试对象功能
        circle.draw();
        System.out.println();

        circleRedBorder.draw();
        System.out.println();

        rectangleBorder.draw();
    }
}
